perm filename PALIN.LST[S1,ALS]1 blob sn#478123 filedate 1979-10-02 generic text, type T, neo UTF8
PASCAL/SAIL 1.1    6-SEP-79    COMPILATION LIST PRODUCED ON 02-OCT-79  AT 21:43:30     PAGE  1

    1   C;

PASCAL/SAIL 1.1    6-SEP-79         COMPILATION LIST PRODUCED ON 02-OCT-79  AT 21:43:30     PAGE   2

    1   (* $A+,D+*)
    2   
    3   PROGRAM PALINDROME(OUTPUT);
    4   
    5   CONST    NUMMAX = 4; PALMAX = 69;  NUMLIM = 5; PALLIM = 70;
    6   
    7   VAR I, J, N, NUMVAL, PALVAL, CARRY : INTEGER;
    8       NUM : ARRAY [1..NUMLIM] OF INTEGER;
    9       PAL,PAL2 : ARRAY [1..PALLIM] OF INTEGER;
   10   
   11   BEGIN
   12   WRITELN (OUTPUT,
   13           'NUM.  ADDITIONS                              PALINDROME');
   14   WRITELN (TTY,
   15           'NUM.  ADDITIONS                              PALINDROME');
   16   FOR I := 1 TO PALMAX DO PAL[I] := 0;
   17   FOR I := 1 TO NUMMAX DO NUM[I] := 0;
   18   NUM [3] := 1; NUMVAL := 3;              (* INITIAL CONDITIONS*)
   19   WHILE NUMVAL <= NUMMAX DO
   20       BEGIN (*WHILE NUMVAL <= NUMMAX*)
   21       PALVAL := NUMVAL;
   22       N := 0;
   23       FOR I := 1 TO NUMVAL DO PAL[I] := NUM[I];
   24       FOR I := NUMVAL + 1 TO PALMAX DO PAL[I] := 0;
   25       WHILE PALVAL <= PALMAX DO
   26           BEGIN (* WHILE PALVAL <= PALMAX*)
   27           I := 1; J := PALVAL;
   28           WHILE ((PAL[I] = PAL [J]) AND (I < J)) DO
   29               BEGIN
   30               I := I + 1;  J := J - 1;
   31               END;
   32           IF I < J THEN       (* NOT A PALINDROME*)
   33               BEGIN
   34               J := PALVAL; CARRY := 0;
   35               FOR I := 1 TO PALVAL DO
   36                   BEGIN
   37                   PAL2[I] := PAL[I] + PAL[J] + CARRY;
   38                   IF PAL2[I] > 9 THEN
   39                       BEGIN
   40                       PAL2[I] := PAL2[I] - 10;  CARRY := 1;
   41                       END
   42                   ELSE CARRY := 0;
   43                   J := J - 1;
   44                   END;
   45               IF CARRY = 1 THEN
   46                   BEGIN
   47                   PALVAL := PALVAL +1;
   48                   PAL2[PALVAL] := 1;
   49                   CARRY := 0;
   50                   END;
   51               IF PALVAL = PALMAX + 1 THEN
   52                   BEGIN
   53                   FOR I := NUMVAL + 1 TO NUMMAX DO
   54                       BEGIN
   55                       WRITE ( OUTPUT,' ');
   56                       WRITE ( TTY,' ');
   57                       END;
   58                   FOR I := NUMVAL DOWNTO 1 DO
   59                       BEGIN
   60                       WRITE (OUTPUT, NUM[I]:1);
   61                       WRITE (TTY, NUM[I]:1);
   62                       END;
   63                   WRITELN (OUTPUT,' NOT FOUND IN ',N:4,' ADDITIONS TO ',
   64                           PALLIM:2,' CHARACTERS.');
   65                   WRITELN (TTY,' NOT FOUND IN ',N:4,' ADDITIONS TO ',
   66                           PALLIM:2,' CHARACTERS.'); BREAK;
   67                   END
   68               ELSE
   69                   BEGIN
   70                   FOR I := 1 TO PALVAL DO PAL[I] := PAL2[I];
   71                   N := N +1;
   72                   END;
   73               END             (* NOT A PALINDROME*)
   74           ELSE IF N <= 9 THEN PALVAL := PALLIM   (* DON'T BOTHER TO PRINT*)
   75           ELSE
   76               BEGIN           (* A PALINDROME HAS BEEN FOUND*)
   77               FOR I := NUMVAL + 1 TO NUMMAX DO
   78                   BEGIN
   79                   WRITE ( OUTPUT,' ');
   80                   WRITE ( TTY,' ');
   81                   END;
   82               FOR I :=NUMVAL DOWNTO 1 DO
   83                   BEGIN
   84                   WRITE (OUTPUT, NUM[I]:1);
   85                   WRITE (TTY, NUM[I]:1);
   86                   END;
   87               WRITE (OUTPUT,N:5);
   88               WRITE (TTY,N:5);
   89               FOR I := PALVAL + 1 TO PALMAX DO
   90                   BEGIN
   91                   WRITE ( OUTPUT,' ');
   92                   WRITE ( TTY,' ');
   93                   END;
   94               FOR I := PALVAL DOWNTO 1 DO
   95                   BEGIN
   96                   WRITE (OUTPUT, PAL[I]:1);
   97                   WRITE (TTY, PAL[I]:1);
   98                   END;
   99               WRITELN (OUTPUT);
  100               WRITELN ( TTY); BREAK;
  101               PALVAL := PALMAX +1;   (* TO EFFECT EXIT FROM WHILE PALVAL < PALMAX*)
  102               END (* A PALINDROME HAS BEEN FOUND*);
  103           END (* WHILE PALVAL <= PALMAX*);
  104       CARRY := 1;
  105       FOR I := 1 TO NUMVAL DO
  106           BEGIN
  107           NUM[I] := NUM[I] +CARRY;
  108           IF NUM[I] > 9 THEN
  109               BEGIN
  110               NUM[I] := NUM[I] - 10;
  111               CARRY := 1;
  112               END
  113           ELSE CARRY := 0;
  114           END;
  115       IF CARRY = 1 THEN
  116           BEGIN
  117           NUMVAL := NUMVAL +1;
  118           NUM[NUMVAL] := 1;
  119           CARRY := 0;
  120           END;
  121       END (*WHILE NUMVAL <= NUMMAX*);
  122   END.

   0 ERROR(S) DETECTED

HIGHSEG:   0K +  516 WORD(S)
LOWSEG :   0K +  247 WORD(S)


RUNTIME: 00:00.459      ELAPSED: 00:00:19.2      3953 CHARS